Skip to content

Method: static {...}

1: package auftraege.factory;
2:
3: import auftraege.auftragsBildungsParameter.SendungsAnzahlSpanne;
4: import util.RegexConstants;
5:
6: import java.util.regex.Matcher;
7:
8: /**
9: * Factory, die in der Lage ist, aus einem String eine {@link SendungsAnzahlSpanne} zu erstellen.
10: */
11: public enum SendungsanzahlSpanneFactory implements DirectVoraussichtlicheDokumentenklassenVariablenFactory<SendungsAnzahlSpanne> {
12:
13:         INSTANCE;
14:
15:         //TODO Art: Feature request; Tim: hier meckert Checkstyle wegen des returncounts. Jedoch würde ich sagen, dass das hier völlig legitime 5 Returns sind. Oder?!
16:         @Override
17:         public SendungsAnzahlSpanne parse(final String wert) {
18:                 final Matcher zwischenZweiZahlenMatcher = RegexConstants.ZWISCHEN_ZWEI_ZAHLEN.matcher(wert);
19:                 final Matcher vergleichsoperatorMitZahlMatcher = RegexConstants.VERGLEICHS_OPERATOR_MIT_ZAHL.matcher(wert);
20:                 final Matcher nurZahlMatcher = RegexConstants.ZAHL.matcher(wert);
21:
22:                 if (vergleichsoperatorMitZahlMatcher.find()) {
23:                         switch (vergleichsoperatorMitZahlMatcher.group(1)) {
24:                                 case "<":
25:                                         return new SendungsAnzahlSpanne(0, Integer.parseInt(vergleichsoperatorMitZahlMatcher.group(2)));
26:                                 case ">":
27:                                         return new SendungsAnzahlSpanne(Integer.parseInt(vergleichsoperatorMitZahlMatcher.group(2)) + 1, Integer.MAX_VALUE);
28:                                 case "<=":
29:                                         return new SendungsAnzahlSpanne(0, Integer.parseInt(vergleichsoperatorMitZahlMatcher.group(2)) + 1);
30:                                 case ">=":
31:                                         return new SendungsAnzahlSpanne(Integer.parseInt(vergleichsoperatorMitZahlMatcher.group(2)), Integer.MAX_VALUE);
32:                                 default:
33:                                         break;
34:                         }
35:                 } else if (zwischenZweiZahlenMatcher.find()) {
36:                         return new SendungsAnzahlSpanne(Integer.parseInt(zwischenZweiZahlenMatcher.group(1)), Integer.parseInt(zwischenZweiZahlenMatcher.group(2)) + 1);
37:                 } else if (nurZahlMatcher.matches()) {
38:                         final int zahl = Integer.parseInt(nurZahlMatcher.group(1));
39:                         return new SendungsAnzahlSpanne(zahl, zahl);
40:                 }
41:                 throw new IllegalArgumentException("Der Wert [ " + wert + " ] der Blattanzahl matcht auf keines der vorgegebenen Pattern.");
42:         }
43:
44: }